/**
 * classes
 */
// function Person (name) {
//   this.name = name
// }
// Person.prototype.say = function () {
//   console.log(`hi, my name is ${this.name}`)
// }
// Person.say()

// class Person {
//   // 构造函数，可使用 this 访问当前类型的实例对象
//   constructor(name) {
//     this.name = name
//   }
//   say() {
//     console.log(`hi, my name is ${this.name}`)
//   }
// }
// const p = new Person('jully') // hi, my name is jully
// p.say()

/**
 * 静态方法
 */
// class Person {
//   constructor(name) {
//     this.name = name
//   }
//   say() {
//     console.log(`hi, my name is ${this.name}`)
//   }

//   // 创建 created 静态方法
//   static create (name) {
//     return new Person(name)
//   }
// }
// const p = Person.create('jerry')
// p.say()

/**
 * 继承
 */
// class Person {
//   constructor(name) {
//     this.name = name
//   }
//   say() {
//     console.log(`hi, my name is ${this.name}`) // hi, my name is Jack
//   }
// }

// // Student 类型继承 Person 类型, 这样 Student 类型中就有 Person 类型中的所有成员
// class Student extends Person {
//   constructor(name, number) {
//     // 由于name在父类也要用到，因此使用一个super对象，始终指向父类，调用它就是调用了父类的构造函数
//     super(name)
//     this.number = number
//   }
//   hello() {
//     super.say()
//     console.log(`hello, my school number is ${this.number}`) // hello, my school number is 1
//   }
// }
// const s = new Student('Jack', 001)
// s.hello()
